#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdio.h>

int main() {
    // 打开触摸屏设备
    int touch_fd = open("/dev/input/event0", O_RDWR);
    if (touch_fd == -1) {
        printf("打开触摸屏失败\n");
        return -1;
    }

    // 存放读取到数据的结构体
    struct input_event ts;
    
    // 初始化坐标
    int x = -1, y = -1;

    // 循环读取触摸屏数据
    while (1) {
        // 读取触摸屏事件
        if (read(touch_fd, &ts, sizeof(ts)) == -1) {
            printf("读取触摸屏事件失败\n");
            close(touch_fd);
            return -1;
        }

        // 判断事件类型为EV_ABS (绝对值事件)
        if (ts.type == EV_ABS) {
            // 处理 X 轴坐标
            if (ts.code == ABS_X) {
                x = ts.value;
            }
            // 处理 Y 轴坐标
            if (ts.code == ABS_Y) {
                y = ts.value;
            }
        }

        // 检查触摸按键事件
        if (ts.type == EV_KEY && ts.code == BTN_TOUCH) {
            if (ts.value == 1) {  // 按下事件
                printf("(%d %d)\n", x, y);
                //break;  // 显示一次后退出循环
            }
        }
    }

// while(1)
    // {
    //     read(touch_fd,&ts,sizeof(ts));
    //     printf("ts.type=%d\n",ts.type);
    //     printf("ts.code=%d\n",ts.code);
    //     printf("ts.code=%d\n",ts.value);
    // }
    // 关闭触摸屏文件描述符
    close(touch_fd);
    return 0;
}

/*
ts.type=3  -->EV_ABS   -->坐标事件
ts.code=0  -->ABS_X    -->X轴坐标
ts.code=764  -->X轴坐标

ts.type=3   -->EV_ABS   -->坐标事件
ts.code=1   -->ABS_Y    -->Y轴坐标
ts.code=264  -->Y轴坐标

ts.type=1     -->EV_KEY   -->按键事件
ts.code=330   -->BTN_TOUCH  -->触摸按键
ts.code=1     -->value=1  -->按下

ts.type=0     -->EV_KEY   -->按键事件
ts.code=0
ts.code=0
ts.type=1
ts.code=330
ts.code=0
ts.type=0
ts.code=0
ts.code=0
*/
